package ar.edu.utn.frgp.banco.menu;

import java.util.List;
import java.util.Scanner;

import ar.edu.utn.frgp.banco.domain.Cuenta;
import ar.edu.utn.frgp.banco.domain.Movimientos;

import ar.edu.utn.frgp.banco.exceptions.ServiceException;
import ar.edu.utn.frgp.banco.service.RecursoServiceCuenta;
import ar.edu.utn.frgp.banco.service.RecursoServiceMovimientos;
import ar.edu.utn.frgp.banco.service.impl.RecursoServiceCuentaImpl;
import ar.edu.utn.frgp.banco.service.impl.RecursoServiceMovimientosImpl;

public class MenuOperaciones {
	public void menuOperaciones() 
	{
		Integer  operacion ;
		Scanner A = new Scanner(System.in);
		do{
			System.out.println(" ");
			System.out.println("1_Realizar Deposito");
	 		System.out.println("2_Realizar Extraccion");
	 		System.out.println("3_Listar Operaciones por cliente");
	 		System.out.println("4_Listado de Operaciones");
	 		System.out.println("0_Volver al Menu Principal");
	 	    System.out.println(" ");
	 		System.out.println("Ingrese una Opcion: ");
	 		operacion = A.nextInt();
			

			Cuenta cuorigen = new Cuenta();
			RecursoServiceCuenta serviceCuenta = new RecursoServiceCuentaImpl();			
			int  dniCliente;
			int  cuentaClienteOrigen;
			double monto;
			Movimientos regMovimiento = new Movimientos();
			RecursoServiceMovimientos serviceMovimientos = new RecursoServiceMovimientosImpl();
			
			

			Scanner dni = new Scanner(System.in);
			Scanner cuentaOrigen = new Scanner(System.in);
			Scanner montoDeposito = new Scanner(System.in);
			Scanner montoExtraccion = new Scanner(System.in);

			
			switch(operacion)
				{
			   ///////////////////////////////////////////////////////////////////
				case 1: 
					
					System.out.println("Ingrese el dni del cliente que Realizara la operacion");
					dniCliente = dni.nextInt();
					
					// lista las cuentas del cliente ingresado
					try {
						List<Cuenta> cuentas = serviceCuenta.listarCuentasActivas(dniCliente);
						
							for (Cuenta c: cuentas){
								System.out.println("");
								 System.out.println("dni "+ c.getDni());
								 System.out.println("nro cuenta "+ c.getNrocuenta());
								 System.out.println("tipo cuenta "+ c.getTipoCuenta());
								 System.out.println("estado "+ c.getEstado());
								 System.out.println("saldo "+ c.getSaldo());
								 System.out.println("descubierto "+ c.getDescubierto());
								 System.out.println("");
							}
						  } catch (ServiceException e) {
						  System.out.println("Error al listar todas las Cuentas . " + e.getMessage());
					}
					
					
					//pide que elija un numero de cuenta
					System.out.println("Ingrese el numero de cuenta de Origen de La Operacion");
					cuentaClienteOrigen = cuentaOrigen.nextInt();
					
					
					// pide que elija el monto a transferir
					System.out.println("Ingrese el Monto de la Deposito");
					monto=montoDeposito.nextDouble();
									
					///// busca las cuentas y modifica el saldo 
				try {
					cuorigen = serviceCuenta.buscarCuenta(cuentaClienteOrigen); //busco y traigo la cuenta de la cual se va a debitar el monto
					cuorigen.setSaldo(cuorigen.getSaldo()+ monto);// modifico el saldo de esa cuenta (saldo de la cuenta + monto )
					serviceCuenta.modificarSaldoCuenta(cuorigen);/// le mando a modificar saldo cuenta la cuenta con el saldo modificado
					
					regMovimiento.cargarMovimiento(cuentaClienteOrigen, 2, 1, cuorigen.getSaldo(),monto );
					serviceMovimientos.registrarMovimiento(regMovimiento);
					
					
				} catch (ServiceException e2) {
					// TODO Auto-generated catch block
					e2.printStackTrace();
				}
					
				break;
				////////////////////////////////////////////////////////////////
				case 2:

					
					System.out.println("Ingrese el dni del cliente que Realizara la operacion");
					dniCliente = dni.nextInt();
					
					// lista las cuentas del cliente ingresado
					try {
						List<Cuenta> cuentas = serviceCuenta.listarCuentasActivas(dniCliente);
						
							for (Cuenta c: cuentas){
								System.out.println("");
								 System.out.println("dni "+ c.getDni());
								 System.out.println("nro cuenta "+ c.getNrocuenta());
								 System.out.println("tipo cuenta "+ c.getTipoCuenta());
								 System.out.println("estado "+ c.getEstado());
								 System.out.println("saldo "+ c.getSaldo());
								 System.out.println("descubierto "+ c.getDescubierto());
								 System.out.println("");
							}
						  } catch (ServiceException e) {
						  System.out.println("Error al listar todas las Cuentas . " + e.getMessage());
					}
					
					
					//pide que elija un numero de cuenta
					System.out.println("Ingrese el numero de cuenta de Origen de La Operacion");
					cuentaClienteOrigen = cuentaOrigen.nextInt();
					
					
					// pide que elija el monto a transferir
					System.out.println("Ingrese el Monto de la Extraccion");
					monto=montoExtraccion.nextDouble();
									
					///// busca las cuentas y modifica el saldo 
				try {
					cuorigen = serviceCuenta.buscarCuenta(cuentaClienteOrigen); //busco y traigo la cuenta de la cual se va a debitar el monto
					cuorigen.setSaldo(cuorigen.getSaldo()- monto);// modifico el saldo de esa cuenta (saldo de la cuenta + monto )
					serviceCuenta.modificarSaldoCuenta(cuorigen);/// le mando a modificar saldo cuenta la cuenta con el saldo modificado
					
					regMovimiento.cargarMovimiento(cuentaClienteOrigen, 1, 1, cuorigen.getSaldo(),monto );
					serviceMovimientos.registrarMovimiento(regMovimiento);
					
				} catch (ServiceException e2) {
					// TODO Auto-generated catch block
					e2.printStackTrace();
				}

				break;
			    ////////////////////////////////////////////////////////////////////		
				case 3:
				break;
				///////////////////////////////////////////////////////////////////////////
				case 4:
					
					System.out.println("1. Listado de Movimientos" );
					System.out.println("" );
					System.out.println("REFERENCIAS" );
					System.out.println("" );
					System.out.println("Tipo Movimiento:" );
					System.out.println("	1. Extraccion" );
					System.out.println("	2. Deposito" );
					System.out.println("" );
					System.out.println("Origen:" );
					System.out.println("	1. Caja" );
					System.out.println("	2. Transferencia" );
					System.out.println("	3. Servicio" );
					System.out.println("	4. Prestamo" );
					System.out.println("	5. Plazo Fijo" );
							
					
					try {
						
						List<Movimientos> movimientos = serviceMovimientos.listarMovimientos();
						
						for (Movimientos c: movimientos){
							System.out.println("");
							System.out.println("Id Movimiento: " + c.getIdmovimiento());
							System.out.println("nro cuenta: " + c.getNrocuenta());
							System.out.println("fecha: " + c.getFecha());
							System.out.println("Tipo Movimiento: " + c.getTipomovimiento());
							System.out.println("Origen: " + c.getOrigen());
							System.out.println("Saldo Actual: " + c.getSaldoactual());
							System.out.println("Monto del Movimiento: " + c.getMontomovimiento());
							System.out.println("");
						}
						
						
					} catch (ServiceException e) {
						System.out.println("Error al listar los servicios pagos . " + e.getMessage());
					}
					
				break;
				///////////////////////////////////////////////////////////////////////////
				case 5: 
				break;
				};		  
				
		}while(operacion != 0);
		
	}
}
